package com.xiyu.service.repository.devops.project;

import com.xiyu.service.model.devops.project.*;
import com.xiyu.service.vo.infra.devops.projectVersion.ProjectVersionPageQueryInput;
import org.babyfish.jimmer.spring.repository.JRepository;
import org.babyfish.jimmer.Page;
import org.springframework.util.StringUtils;
import java.util.Optional;
import java.util.List;

public interface DevopsProjectVersionRepository extends JRepository<DevopsProjectVersion, Long> {
    DevopsProjectVersionTable devopsProjectVersionTable = DevopsProjectVersionTable.$;

    default Page<DevopsProjectVersion> pageQuery(ProjectVersionPageQueryInput inputVO){
        return sql().createQuery(devopsProjectVersionTable)
                .whereIf(StringUtils.hasText(inputVO.getVersionContent()), () -> devopsProjectVersionTable.versionContent().like(inputVO.getVersionContent()))
                .whereIf(inputVO.getProjectId() != null, () -> devopsProjectVersionTable.projectId().eq(inputVO.getProjectId()))
                .whereIf(StringUtils.hasText(inputVO.getRemark()), () -> devopsProjectVersionTable.remark().like(inputVO.getRemark()))
                .whereIf(StringUtils.hasText(inputVO.getVersion()), () -> devopsProjectVersionTable.version().like(inputVO.getVersion()))
                .orderBy(devopsProjectVersionTable.id().desc())
                .select(devopsProjectVersionTable.fetch(DevopsProjectVersionFetcher.$.allScalarFields().project(DevopsProjectFetcher.$.allScalarFields())))
                .fetchPage(inputVO.getPageNo() - 1, inputVO.getPageSize());
    }

    default Optional<DevopsProjectVersion> findDetailById(Long id){
        return sql().createQuery(devopsProjectVersionTable)
                .where(devopsProjectVersionTable.id().eq(id))
                .select(devopsProjectVersionTable.fetch(DevopsProjectVersionFetcher.$.allScalarFields().project(DevopsProjectFetcher.$.allTableFields())))
                .fetchOptional();
    }

    List<DevopsProjectVersion> getByProjectId(Long projectId);


}